﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Entidad;
using System.Data.SqlClient;
namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsTh_pedido_imp_detDAO
    {

        private AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();
        private readonly DM_CROSLAND_20130417Entities ContextoDeObjsBE = new DM_CROSLAND_20130417Entities();
        
        public bool Actualizar_Cantidad_Sugerida_Real(int Nro_Pedido, int id_material, decimal qt_Cant_Sug_real)
        {
            string sql; 
            try
            {
                int int_Cant_Sug_real = Convert.ToInt32(qt_Cant_Sug_real);
                sql = "update dbo.TH_PRONOSTICO_IMP_DET set cant_sug_real=" + int_Cant_Sug_real +
                                                    " where Nro_Pronostico=" + Nro_Pedido + " and id_material=" + id_material;

                ContextoDeObjs.ExecuteStoreCommand(sql);

                //ContextoDeObjs.ExecuteStoreCommand("update 	dbo.TH_PRONOSTICO_IMP_DET set cant_sug_real=" + qt_Cant_Sug_real +
                //                                    " where Nro_Pronostico=" + Nro_Pedido + " and id_material=" + id_material);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }


        }


        public bool Modificar(V_UPDATE_PRONOSTICO_IMP_DET obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("V_UPDATE_PRONOSTICO_IMP_DET", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
                return true;

            }
            catch (Exception)
            {
                return false;

            }

        }


        public List<T_PRONOSTICO_VENTA_EN> ListarPronostico(int NPronostico, int IdMaterial)
        {
            List<T_PRONOSTICO_VENTA_EN> list = new List<T_PRONOSTICO_VENTA_EN>();
            var queryText = "SELECT * FROM [dbo].[FU_PRONOSTICO_VENTA_LISTAR](" + NPronostico + "," + IdMaterial + ")";
            var r = ContextoDeObjs.ExecuteStoreQuery<T_PRONOSTICO_VENTA_EN>(queryText);           

            list = r.OrderByDescending(x => x.CANT_VENTA).ToList();
            return list;

        }

        public List<V_PRONOSTICO_IMP_DET_BE> listar(int nu_pedido)
        {
            var p = new object[] { new SqlParameter("@Nro_Pronostico", nu_pedido) };
            var resultado = ContextoDeObjsBE.ExecuteStoreQuery<V_PRONOSTICO_IMP_DET_BE>("exec USP_V_PRONOSTICO_IMP_DET_LISTAR @Nro_Pronostico", p).AsQueryable().ToList();
            return resultado;

        }

        public List<V_PRONOSTICO_IMP_DET> ListaCargaExterno(int nu_pedido)
        {
            List<V_PRONOSTICO_IMP_DET> list = new List<V_PRONOSTICO_IMP_DET>();
            try
            {
                var q = from c in ContextoDeObjs.V_PRONOSTICO_IMP_DET
                        where c.Nro_Pronostico == nu_pedido && c.cant_sug_real > 0
                        select c;
                list = q.ToList();

            }
            catch (Exception)
            {
                list = null;
                throw;
            }
            return list;
        }

        public List<V_PRONOSTICO_IMP_DET> ListaCargaExterno(int intNumPedido, int intIdOrgVta)
        {
            List<V_PRONOSTICO_IMP_DET> list = new List<V_PRONOSTICO_IMP_DET>();
            try
            {
                var q = from c in ContextoDeObjs.V_PRONOSTICO_IMP_DET
                        where c.Nro_Pronostico == intNumPedido && c.cant_sug_real > 0
                        //&& c.id_org_vta == intIdOrgVta
                        select c;
                list = q.ToList();

            }
            catch (Exception)
            {
                list = null;
                throw;
            }
            return list;
        }

        public int ListarTextoTotal(int NPronostico, int IdMaterial)
        {

            int total = 0;
            try
            {

                var q = from t in
                            (from t in ContextoDeObjs.T_PRONOSTICO_VENTA
                             where
                               t.NRO_PRONOSTICO == NPronostico &&
                               t.ID_MATERIAL == IdMaterial && t.IND_MAX == 1
                             select new
                             {
                                 t.CANT_VENTA,
                                 Dummy = "x"
                             })
                        group t by new { t.Dummy } into g
                        select new
                        {
                            TOTAL_CANT = (System.Int32?)g.Sum(p => p.CANT_VENTA)
                        };


                foreach (var item in q)
                {
                    total = Convert.ToInt32(item.TOTAL_CANT);
                }
            }
            catch (Exception)
            {
                total = 0;
            }

            return total;

        }


        public int countflag(int NPronostico, int IdMaterial)
        {

            int contador = 0;
            try
            {
                var q = from t in
                            (from t in ContextoDeObjs.T_PRONOSTICO_VENTA
                             where
                               t.NRO_PRONOSTICO == NPronostico &&
                               t.ID_MATERIAL == IdMaterial && t.IND_MAX == 1
                             select new
                             {
                                 t.IND_MAX,
                                 Dummy = "x"
                             })
                        group t by new { t.Dummy } into g
                        select new
                        {
                            FLAG = (Int32?)g.Count()
                        };

                foreach (var item in q)
                {
                    contador = Convert.ToInt32(item.FLAG);
                }
            }
            catch (Exception)
            {
                contador = 0;

            }
            return contador;

        }


        public double total_general(int nroPronostico, int id_material)
        {

            double total_general = 0;

            try
            {


                var q = from t in ContextoDeObjs.TH_PRONOSTICO_IMP_DET
                        where t.id_material == id_material &&
                          t.Nro_Pronostico == nroPronostico
                        select new
                        {
                            t.psd
                        };


                foreach (var item in q)
                {

                    total_general = Convert.ToDouble(item.psd);
                }






            }
            catch (Exception)
            {


            }

            return total_general;


        }

        public decimal can_vta(int nroPronostico, int id_material)
        {

            decimal cant_vta = 0;


            try
            {
                var q = from t in ContextoDeObjs.TH_PRONOSTICO_IMP_DET
                        where
                          t.Nro_Pronostico == nroPronostico &&
                          t.id_material == id_material
                        select new
                        {
                            t.cant_vta
                        };

                foreach (var item in q)
                {
                    cant_vta = item.cant_vta;
                }

            }
            catch
            {


            }

            return cant_vta;

        }


        public decimal CANT_NO_ATE(int nroPronostico, int id_material)
        {

            decimal cant_no_a = 0;


            try
            {
                var q = from t in ContextoDeObjs.TH_PRONOSTICO_IMP_DET
                        where
                          t.Nro_Pronostico == nroPronostico &&
                          t.id_material == id_material
                        select new
                        {
                            t.cant_no_Ate
                        };

                foreach (var item in q)
                {
                    cant_no_a = item.cant_no_Ate;
                }

            }
            catch
            {


            }

            return cant_no_a;

        }


        public decimal totalCNO(int nroPronostico, int id_material)
        {

            decimal total = 0;

            try
            {
                var q = from t in ContextoDeObjs.TH_PRONOSTICO_IMP_DET
                        where
                          t.Nro_Pronostico == nroPronostico &&
                          t.id_material == id_material
                        select new
                        {
                            t.psd
                        };

                foreach (var item in q)
                {
                    total = item.psd;
                }

            }
            catch
            {


            }




            return total;

        }




        public int PronosticoImportacionNroDiasReposicion(int nroPronostico, String tipoABC)
        {
            try
            {
                var queryText = String.Format("  SELECT NRO_DIAS_REPOSICION FROM T_PRONOSTICO_PARAMETRO_REPOSICION  WHERE NRO_PRONOSTICO={0} AND TIPO_ABC='{1}'", nroPronostico, tipoABC);
                var lisr = ContextoDeObjs.ExecuteStoreQuery<int>(queryText).ToList();
                return lisr.FirstOrDefault();
            }
            catch (Exception)
            {
                return 0;
            }
        }


        public int obtenerMeses(string nro_pronostico) {

            try
            {

                var mes_ini = "select ANO_MES_INI from TH_PRONOSTICO_IMP_CAB where Nro_Pronostico=" + nro_pronostico;
                var lis_mes_ini = ContextoDeObjs.ExecuteStoreQuery<String>(mes_ini).ToList();
                String mes_inicial = lis_mes_ini.FirstOrDefault();

               var mes_fin = "select ANO_MES_FIN from TH_PRONOSTICO_IMP_CAB where Nro_Pronostico=" + nro_pronostico;
               var lis_mes_fin = ContextoDeObjs.ExecuteStoreQuery<String>(mes_fin).ToList();
               String mes_final = lis_mes_fin.FirstOrDefault();


               var q = "select dbo.FU_GET_NRO_MESES('" + mes_inicial + "','" + mes_final + "')";
               var lisr = ContextoDeObjs.ExecuteStoreQuery<int>(q).ToList();
               return lisr.FirstOrDefault();
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }

        public IEnumerable<Object> listaPedidosHerramientas(int nro_pronostico)
        {

            IEnumerable<Object> list = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.TH_PRONOSTICO_IMP_CAB
                        from d in ContextoDeObjs.TH_PRONOSTICO_IMP_DET
                        from tm in ContextoDeObjs.TD_MATERIAL
                        from tg in ContextoDeObjs.TD_GRUPO_ARTICULO
                        where c.Nro_Pronostico == d.Nro_Pronostico
                        && d.id_material == tm.ID_MATERIAL
                        && tm.ID_GRUPO_ARTICULO == tg.ID_GRUPO_ARTICULO
                        && d.Nro_Pronostico == nro_pronostico && tg.DES_GRUPO_ARTICULO_2 == "Llantas"
                        && d.cant_sug_real > 0
                        select new
                        {
                            tm.COD_MATERIAL,
                            tm.DES_MATERIAL,
                            d.cant_sug_real

                        };

                list = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }


            return list;

        }


        public IEnumerable<Object> listaPedidosRepuestos(int nro_pronostico)
        {

            IEnumerable<Object> list = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.TH_PRONOSTICO_IMP_CAB
                        from d in ContextoDeObjs.TH_PRONOSTICO_IMP_DET
                        from tm in ContextoDeObjs.TD_MATERIAL
                        from tg in ContextoDeObjs.TD_GRUPO_ARTICULO
                        where c.Nro_Pronostico == d.Nro_Pronostico
                        && d.id_material == tm.ID_MATERIAL
                        && tm.ID_GRUPO_ARTICULO == tg.ID_GRUPO_ARTICULO
                        && d.Nro_Pronostico == nro_pronostico && tg.DES_GRUPO_ARTICULO_2 == "Repuestos"
                        && d.cant_sug_real > 0
                        select new
                        {
                            tm.COD_MATERIAL,
                            tm.DES_MATERIAL,
                            d.cant_sug_real

                        };

                list = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }


            return list;

        }



    }


}
